package cn.machen.www.fashion.controller;

import cn.itcast.commons.CommonUtils;
import cn.machen.www.fashion.pojo.*;
import cn.machen.www.fashion.services.OrderService;
import cn.machen.www.fashion.utils.BaseServlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class OrderServlet extends BaseServlet {
    private OrderService orderService = new OrderService();

    /**购物车一键购买
     *      从session中获取购物车类cart
     *      将cart类包装成order类
     *      保存order到request域中，转发
     */
    public String add(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        Cart cart = (Cart)request.getSession().getAttribute("cart");
        Order order = new Order();
        order.setOid(CommonUtils.uuid());  //设置编号
        order.setOrdertime(new Date()); //设置下单时间
        order.setState(1);//设置订单状态为1，表示未付款
        User user = (User)request.getSession().getAttribute("user");
        order.setOwner(user);//设置订单所有者
        order.setTotal(cart.getToatal());//设置订单的合计，从cart中获取合计
            //创建订单条目集合
        List<OrderItem> orderItemList = new ArrayList<OrderItem>();
            //循环遍历Cart类中的每个CartItem,将其包装成OrderItem对象
        for(CartItem cartItem : cart.getCartItem()) {
            OrderItem oi = new OrderItem();         //创建订单条目

            oi.setIid(CommonUtils.uuid());          //设置条目的id
            oi.setCount(cartItem.getCount());       //设置条目的数量
            oi.setProduct(cartItem.getProduct());   //设置条目的商品
            oi.setSubtotal(cartItem.getSubtotal()); //设置条目的小计
            oi.setOrder(order);                     //设置所属订单

            orderItemList.add(oi);//把订单条目添加到集合中
        }
        // 把所有的订单条目添加到订单中
        order.setOrderItems(orderItemList);
        // 清空购物车
        cart.clear();

        //调用orderService添加订单
        orderService.add(order);

        request.setAttribute("order", order);
        return null;
    }
}
